/**********************************
 * 西门编写的表单验证js类XCheck（Beat2.0）
 * 以前写过一个1.0版本，因为思路不好，适应不了所有情况，所以不了了之。
 * 时隔半年，最近终于想好了一种新的思想去实现，达到了自己满意的效果。
 * 完成时间：2008-07-24 14：00
 * 版权所有：AJAX中国
 * 网址：http://www.okajax.com
 * E-mail:westdoorking@163.com
 * 备注：您可以免费使用XCheck类，但是请不要删除版权信息。
 * 如果本类给您的网站造成bug，或者引起不良后果，作者不负任何责任。
 **********************************/
/***
 * 类主体
 * 没有采用复杂的混合工厂模式封装，这样写法比较通俗易懂
 */
function XCheck(){
    var flag = false;
    
    var msgtips = "请输入";
    var msgok = "输入正确";
    var msgwrong = "输入不满足规则";
    var msgajax = "此内容数据库存在";
    var msgerr = "这里数据还有有错误！";
    
    var url = "";
    var parname = "username";
    
    var imgok = "../images/ok.gif";
    var imgwrong = "../images/wrong.gif";
    var imageload = "../images/33-0.gif";
    //全局对象
    var checkobj;
    var tipsobj;
    
    this.XChecksetcont = function(str1, str2, str3, str4, str5){
        /***
         * XChecksetcont方法具有5个参数,都是非必须,分别表示一下含义
         *（1）提示信息
         *（2）输入正确提示
         *（3）输入错误提示
         *（4）数据库存在此数据输出的提示信息。不存在Ajax检查的字段此地方写“”。或者null（建议null）
         *（5）提交表单还有字段为成功系统的提示信息，是以alert的形式提示。
         */
        msgtips = (str1 == null ? msgtips : str1);
        msgok = (str2 == null ? msgok : str2);
        msgwrong = (str3 == null ? msgwrong : str3);
        msgajax = (str4 == null ? msgajax : str4);
        msgerr = (str5 == null ? msgerr : str5);
    }
    this.seturl = function(u, p){
        /**********************************
         * 设置后台页面的路径以及参数
         * 1－后台页面名称×（aspx。jsp。asp均可）
         * 2－超链接后面带的参数，默认是username。
         **********************************/
        url = u;
        parname = (p == null ? parname : p);
    }
    this.getstate = function(){
        return flag;
    }
    this.alertwrong = function(){
       // alert(msgerr);
        checkobj.focus();
    }
    /***
     * 验证主要方法.接受四个参数,分别表示
     * 1-objid:表单输入文本框的id.
     * 2-tipid:显示提示信息元素id.
     * 3-检测输入字段是否满足用户自定义规则,传递方法名称
     * 4-是否启用ajax操作,true为启用,启用后需调用seturl指定异步请求地址和参数名称,参数值为此项内容
     */
    this.check = function(objid, tipid, funname, ajax){
    
        checkobj = objid;
        tipsobj = tipid;
        if (typeof(checkobj) == "string") 
            checkobj = document.getElementById(checkobj);
        if (typeof(tipsobj) == "string") 
            tipsobj = document.getElementById(tipsobj);
        checkobj.onfocus = function(){
            tipsobj.className = "onFocus";
            insertfun(msgtips);
        }
        checkobj.onblur = function(){   
			var regExp = /(')|(")/ ;              
            if(regExp.test(checkobj.value)){ 
				 tipsobj.className = "onError";
                 insertfun(msgwrong);
                 flag = false;           
                 return ;
            } 
            var XCsss = funname + "('" + checkobj.value + "')";
            if (eval(XCsss)) { //动态执行 
                if (ajax) {
                    makeRequest(url + "?" + parname + "=" + checkobj.value + "&time="+new Date().getTime());
                }else {
                    tipsobj.className = "onCorrect";
                    insertfun(msgok);
                    flag = true;
                }
            }else {
                tipsobj.className = "onError";
                insertfun(msgwrong);
                flag = false;
            }
        }
    }
    function insertfun(val){
        tipsobj.innerHTML = val;
    }
    function getimg(val){
        /**
         * 修改此地方可以修改提示图片的样式
         */
        return "<img src='" + val + "' />"
    }
    function makeRequest(url){
    	 tipsobj.className = "onLoad";
        insertfun("正在对信息进行合法性校验，请稍候...");
        http_request = false;
        if (window.XMLHttpRequest) {
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
            }
        }
        else 
            if (window.ActiveXObject) {
                try {
                    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } 
                catch (e) {
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } 
                    catch (e) {
                    }
                }
            }
        if (!http_request) {
            //alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = alertContents;
        http_request.open('GET', url , true);
        http_request.send(null);
    }
    function alertContents(){
        if (http_request.readyState == 4&&http_request.status == 200) {
        		if(http_request.responseText == 0){// 数据为空
        			tipsobj.className = "onError";
                    insertfun(msgerr);
                    flag = false;
        		}else if (http_request.responseText == 1) { //代表验证不通过
                    tipsobj.className = "onError";
                    insertfun(msgajax);
                    flag = false;
                }else if (http_request.responseText == 2) { //代表通过
                    tipsobj.className = "onCorrect";
                    insertfun(msgok);
                    flag = true;
                }
            }
            
    }
}